package com.ultron.app.modules.user.ability.auth.impl;

import com.ultron.app.modules.user.entity.auth.AuthUserInfoVO;
import com.ultron.app.entity.system.ResultEnum;
import com.ultron.app.exception.ServiceException;
import com.ultron.app.modules.user.entity.userMenu.vo.UserMenuVO;
import com.ultron.app.modules.user.entity.userRoleMenu.bo.UserRoleMenuQueryBO;
import com.ultron.app.modules.user.entity.userRoleMenu.vo.UserRoleMenuVO;
import com.ultron.app.util.UserUtils;
import com.ultron.app.modules.user.ability.auth.IAutheGetUserRoleMenuAbilityService;
import com.ultron.app.modules.user.service.userRoleMenu.IUserRoleMenuGetListService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 标题：AuthGetUserRoleMenuAbilityServiceImpl
 * 说明：
 * 时间：2024/2/28
 * 作者：admin
 */
@Service
public class AuthGetUserRoleMenuAbilityServiceImpl implements IAutheGetUserRoleMenuAbilityService {


    @Autowired
    private IUserRoleMenuGetListService userRoleMenuGetListService;
    /**
     * 获取当前用户所属角色菜单
     * @return
     */
    @Override
    public List<UserMenuVO> getUserRoleMenu() {
        List<UserMenuVO> rsp = new ArrayList<>();
        //入参效验
        this.validParams();
        //执行核心逻辑前调用
        this.beforeToDo();
        AuthUserInfoVO userInfoVO = UserUtils.getSysUser();
        Long roleId = userInfoVO.getRoleId();
        UserRoleMenuQueryBO userRoleMenuQueryBO = new UserRoleMenuQueryBO();
        userRoleMenuQueryBO.setRoleId(roleId);
        List<UserRoleMenuVO> userRoleMenuList = userRoleMenuGetListService.getList(userRoleMenuQueryBO);
        if(null != userRoleMenuList){
            for (UserRoleMenuVO userRoleMenuVO : userRoleMenuList){
                rsp.add(userRoleMenuVO.getMenu());
            }
        }

        return rsp;
    }


    /**
     * 类通用入参校验
     *
     */
    private void validParams( ) {
      if(!UserUtils.isLogin()){
          throw new ServiceException(ResultEnum.UN_AUTHORIZED,"未登录用户！");
      }
      if(!UserUtils.isSysUser()){
          throw new ServiceException("非管理后台用户！");

      }
    }

    /**
     * 类通用执行前调用逻辑
     *
     */
    private void beforeToDo( ) {

    }
}
